package main

import (
	"calc"
	"constvars"
	"fmt"
	"helloworld"
	"vars"
)
/* 声明全局变量 */
var g int
func main() {
	Data := [3]int{0, 1, 2}
	J := 0 // 多变量赋值时，先计算所有相关值，然后再从左到右依次赋值。
	J, Data[J] = 2, 100 // (J=0)->(J=2) Data[0]==0 -> Data[0] == 100
	sum := calc.Add(1,2)
	fmt.Println(sum)

	sub := calc.Sub(2,1)
	fmt.Println(sub)

	helloworld.SayHello()
	fmt.Println(vars.F) // 1.6
	fmt.Println(vars.S) // abc
	fmt.Println(vars.X) // 0
	fmt.Println(vars.T) //abc
	fmt.Println(vars.N) // 123
	fmt.Println(vars.Y) // 0
	fmt.Println(vars.Z) // 0
	fmt.Println(vars.A) // 0
	fmt.Println(vars.B) // 0

	fmt.Println("")
	fmt.Println(Data)
	fmt.Println(J)


	// 如果初始化是使用表达式，则可以省略类型；变量从初始值中获得类型。
	var c, python, java = true, false, "no1"
	fmt.Println(c,python,java)

	//短声明变量
	//在函数内部，可以使用更简略的 ":=" 方式定义变量。":=" 简洁赋值语句在明确类型的地方，可以用于替代 var 定义。
	k:=3
	fmt.Println(k)
	// 函数外的每个语句都必须以关键字开始（ var 、 func 、等等）， ":=" 结构不能使用在函数外

	// _ 特殊只写变量 "_"，用于忽略值占位。
	_, s := vars.Test()
	fmt.Println(s)

	vars.Four()

	vars.Localvars()

	vars.AllVars()

	constvars.Test1() // 10 100 false xxx
	fmt.Println(constvars.World) // hello world

	constvars.Test2() // abc abc

	constvars.Test3() // abc 3 8

	constvars.Test4() // 0 1 2 3 4 5 6

	constvars.Test5() // 1024 1048576 1073741824 1099511627776

	constvars.Test6() // 0 0 1 1024

	constvars.Test7() // 0 1 c c 4 5

	constvars.Test8()
}
